package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.MultiQuestion;
import org.apache.ibatis.annotations.*;

import java.util.List;

//选择题Mapper层
@Mapper
public interface MultiQuestionMapper {
    /**
     * select * from multiquestions where questionId in (
     * 	select questionId from papermanage where questionType = 1 and paperId = 1001
     * )
     */

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据作业ID和题目类型查询多选题
     * 方法的参数为作业ID，返回类型为多选题列表
     */
    @Select("select * from multi_question where questionId in (select questionId " +
            "from paper_manage where questionType = 1 and paperId = #{paperId})")
    List<MultiQuestion> findByIdAndType(Integer PaperId);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询所有多选题，并进行分页
     * 方法的参数为分页对象 Page，返回类型为多选题的分页列表
     */
    @Select("select * from multi_question")
    IPage<MultiQuestion> findAll(Page page);

    /**
     * 查询最后一条记录的questionId
     * @return MultiQuestion
     */
    @Select("select questionId from multi_question order by questionId desc limit 1")
    MultiQuestion findOnlyQuestionId();

    /**
     * 使用 @Insert 注解标记，表示这是一个插入操作
     * 向多选题表中插入一条新的题目信息
     * 方法的参数为一个 MultiQuestion 对象，包含了待插入的题目信息
     * 使用 @Options 注解配置生成的主键属性，使其能够返回插入记录的题目ID
     * 返回类型为操作结果的整数
     */
    @Options(useGeneratedKeys = true,keyProperty = "questionId")
    @Insert("insert into multi_question(subject,question,answerA,answerB,answerC,answerD,rightAnswer,analysis,section,level) " +
            "values(#{subject},#{question},#{answerA},#{answerB},#{answerC},#{answerD},#{rightAnswer},#{analysis},#{section},#{level})")
    int add(MultiQuestion multiQuestion);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据科目名称随机查询多选题，并限制数量
     * 方法的参数为科目名称和需要查询的数量，返回类型为题目ID的列表
     */
    @Select("select questionId from multi_question  where subject =#{subject} order by rand() desc limit #{pageNo}")
    List<Integer> findBySubject(@Param("subject") String subject, @Param("pageNo") Integer pageNo);

    /**
     * 使用 @Update 注解标记，表示这是一个更新操作
     * 根据题目ID更新对应的多选题信息
     * 方法的参数为一个 MultiQuestion 对象，包含了待更新的题目信息
     * 返回类型为操作结果的整数
     */
    @Update("update multi_question set subject = #{subject}, question = #{question}, " +
            "answerA = #{answerA}, answerB = #{answerB}, answerC = #{answerC}, answerD = #{answerD}, " +
            "rightAnswer = #{rightAnswer}, analysis = #{analysis}, section = #{section}, level = #{level} " +
            "where questionId = #{questionId}")
    int edit(MultiQuestion multiQuestion);

}
